package com.sob.bountyhunter.hud;

import java.awt.Point;

import org.newdawn.slick.Color;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Image;
import org.newdawn.slick.Input;

import com.sob.bountyhunter.Art;
import com.sob.bountyhunter.Mapa;
import com.sob.bountyhunter.Temporizador;

public class Ventana {
	public float x, y;
	int ancho, alto;
	public String texto;
	public Color colorTexto=Color.white;
	//private int tileW, tileH;
	protected boolean mostrar=true;
	protected boolean drag=false;
	protected float mouseXOff;
	protected float mouseYOff;
	
	
	protected Point arribaIzquierda;
	protected Point arribaDerecha;
	protected Point abajoIzquierda;
	protected Point abajoDerecha;
	protected Point lateralIzquierdo;
	protected Point lateralDerecho;
	protected Point lateralSuperior;
	protected Point lateralInferior;
	protected Point fondo;

	protected boolean prevMlbPulsado;
	protected boolean mlbPulsado;
	protected boolean puedeCerrarse = false;
	
	public Ventana(float px, float py, int an, int alt){
		x=px;
		y=py;
		ancho=an;
		alto=alt;

		arribaIzquierda = new Point(0,0);
		arribaDerecha = new Point(2,0);
		abajoIzquierda = new Point(0,2);
		abajoDerecha = new Point(2,2);
		lateralIzquierdo = new Point(0,1);
		lateralDerecho = new Point(2,1);
		lateralSuperior= new Point(1,0);
		lateralInferior= new Point(1,2);
		fondo= new Point(1,1);
	}
	
	public void update(GameContainer gameContainer, int deltaTime){
		int mouseX=gameContainer.getInput().getMouseX();
		int mouseY=gameContainer.getInput().getMouseY();
		
		prevMlbPulsado=mlbPulsado;
		
		mlbPulsado=gameContainer.getInput().isMouseButtonDown(0);		
		
		//Arrastrar la ventana
		
		//Si estaba arrastrando
		if(drag){
			//Si el boton no sigue pulsado
			if(!mlbPulsado){
				//Deja de arrastrar
				drag=false;
			}else{
				//Mueve la ventana
				x=mouseX-mouseXOff;
				y=mouseY-mouseYOff;
			}
		}else{
			//Si el raton esta en posicion para arrastrar
			if(mouseY>=y && mouseY<=y+16){
				if(mouseX>=x && mouseX<=x+(ancho*16)){
					//El boton esta pulsado
					if(mlbPulsado){
						//Empieza a arrastrar
						drag=true;
						//Guarda la diferencia entre el raton y la ventana
						mouseXOff=mouseX-x;
						mouseYOff=mouseY-y;
					}else{
						//Deja de arrastrar
						drag=false;
					}
				}
			}
		}
		
		//Cerrar
		if(puedeCerrarse){
			if(mlbPulsado){
				if(mouseX>x+((ancho+1)*16) && mouseX<x+((ancho+2)*16)-8){
					if(mouseY>y+8 && mouseY<y+16){
						mostrar=false;
					}
				}
			}
		}
	}

	public void render(GameContainer gameContainer, Graphics graphics)
	{
		int anchoTotal=ancho+2;
		int altoTotal=alto+2;
		if(mostrar){
			for(int i=0;i<anchoTotal;i++){
				for(int j=0;j<altoTotal;j++){
					Image img=null;
					if(i==0 && j==0){ //Esquina superior izquieda
						img=Art.ventana.getSubImage(arribaIzquierda.x, arribaIzquierda.y);
					}else if(i==anchoTotal-1 && j==altoTotal-1){ //Esquina inferior derecha
						img=Art.ventana.getSubImage(abajoDerecha.x, abajoDerecha.y);
					}else if(i==anchoTotal-1 && j==0){ //Esquina superior derecha
						img=Art.ventana.getSubImage(arribaDerecha.x, arribaDerecha.y);
					}else if(i==0 && j==altoTotal-1){ //Esquina inferior izquierda
						img=Art.ventana.getSubImage(abajoIzquierda.x, abajoIzquierda.y);					
					}else if(i==0){ //Lateral izquierdo
						img=Art.ventana.getSubImage(lateralIzquierdo.x, lateralIzquierdo.y);
					}else if(i==anchoTotal-1){ //Lateral derecho
						img=Art.ventana.getSubImage(lateralDerecho.x, lateralDerecho.y);
					}else if(j==0){ //Lateral superior
						img=Art.ventana.getSubImage(lateralSuperior.x, lateralSuperior.y);
					}else if(j==altoTotal-1){ //Lateral inferioro
						img=Art.ventana.getSubImage(lateralInferior.x, lateralInferior.y);
					}else{ //Interior
						img=Art.ventana.getSubImage(fondo.x, fondo.y);
					}
					
					img.draw(x+(i*16), y+(j*16));
				}
			}
			
			if(texto!=null){
				String[] t=texto.split("\n");
				
				for(int i=0;i<t.length;i++){
					graphics.setColor(colorTexto);
					Art.drawText(t[i], x+18, y+13+(i*16), true, Art.defaultFont);
				}
			}
		}
	}
	
	public boolean isMouseDentro(Input input){
		boolean res=false;
		
		int mouseX=input.getMouseX();
		int mouseY=input.getMouseY();

		if(mouseX>=x && mouseX<=x+(ancho*16) && mouseY>=y && mouseY<=y+(alto*16)){
			res=true;
		}
		
		return res;
	}
	public void setMostrar(boolean m){
		mostrar=m;
	}
	public boolean getMostrar(){
		return mostrar;
	}
	
	public void addLinea(String t){
		setSiMasAncho(Art.getCleanString(t));		
		texto+=t+"\n";		
		alto++;
	}
	protected void setSiMasAncho(String t){
		if((int)(t.length()*0.8)>ancho){
			ancho=(int)(t.length()*0.8);
		}
	}
	
	public void resetContenido(){
		texto="";
		
		ancho=0;
		alto=0;		
	}

}
